using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._RelationshipClasses
{
    /// <summary>
    /// <para>Add Rule To Relationship Class</para>
    /// <para>Adds a rule to a relationship class.</para>
    /// <para>将规则添加到关系类。</para>
    /// </summary>    
    [DisplayName("Add Rule To Relationship Class")]
    public class AddRuleToRelationshipClass : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddRuleToRelationshipClass()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_rel_class">
        /// <para>Input Relationship Class</para>
        /// <para>The relationship class to which a rule will be added.</para>
        /// <para>将向其添加规则的关系类。</para>
        /// </param>
        public AddRuleToRelationshipClass(object _in_rel_class)
        {
            this._in_rel_class = _in_rel_class;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Add Rule To Relationship Class";

        public override string CallName => "management.AddRuleToRelationshipClass";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_rel_class, _origin_subtype, _origin_minimum, _origin_maximum, _destination_subtype, _destination_minimum, _destination_maximum, _out_rel_class];

        /// <summary>
        /// <para>Input Relationship Class</para>
        /// <para>The relationship class to which a rule will be added.</para>
        /// <para>将向其添加规则的关系类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Relationship Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_rel_class { get; set; }


        /// <summary>
        /// <para>Origin Subtype</para>
        /// <para>Specifies the subtype of the origin class. If the origin class has subtypes, choose the subtype to which you want to associate a relationship class rule. If the origin class has no subtypes, the relationship rule will apply to all features.</para>
        /// <para>指定源类的子类型。如果源类具有子类型，请选择要将关系类规则关联到的子类型。如果源类没有子类型，则关系规则将应用于所有要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Origin Subtype")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _origin_subtype { get; set; } = null;


        /// <summary>
        /// <para>Origin Minimum</para>
        /// <para>Specifies the minimum range cardinality for the origin class if the relationship class is many-to-many.</para>
        /// <para>如果关系类是多对多，则指定源类的最小范围基数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Origin Minimum")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _origin_minimum { get; set; } = null;


        /// <summary>
        /// <para>Origin Maximum</para>
        /// <para>Specifies the maximum range cardinality for the origin class if the relationship class is many-to-many or one-to-many.</para>
        /// <para>如果关系类是多对多或一对多，则指定源类的最大范围基数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Origin Maximum")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _origin_maximum { get; set; } = null;


        /// <summary>
        /// <para>Destination Subtype</para>
        /// <para>Specifies the subtype of the destination class. If the destination class has subtypes, choose the subtype to which you want to associate a relationship class rule. If the destination class has no subtypes, the relationship rule will apply to all features.</para>
        /// <para>指定目标类的子类型。如果目标类具有子类型，请选择要将关系类规则关联到的子类型。如果目标类没有子类型，则关系规则将应用于所有要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Destination Subtype")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _destination_subtype { get; set; } = null;


        /// <summary>
        /// <para>Destination Minimum</para>
        /// <para>Specifies the minimum range cardinality for the destination class if the relationship class is many-to-many or one-to-many.</para>
        /// <para>如果关系类是多对多或一对多，则指定目标类的最小范围基数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Destination Minimum")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _destination_minimum { get; set; } = null;


        /// <summary>
        /// <para>Destination Maximum</para>
        /// <para>Specifies the maximum range cardinality for the destination class if the relationship class is many-to-many or one-to-many.</para>
        /// <para>如果关系类是多对多或一对多，则指定目标类的最大范围基数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Destination Maximum")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _destination_maximum { get; set; } = null;


        /// <summary>
        /// <para>Updated Relationship Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Relationship Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_rel_class { get; set; }


        public AddRuleToRelationshipClass SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}